本篇為延續 “ 常用的 dbt 指令參數(上)” 的下集
--target
--target
參數允許您指定要運行的目標,例如 prod
(生產環境)或 dev
(開發環境)。這有助於區分不同環境中的運行,但這在官方文件提到比較少,相關的只在講 profile.yml 段落提到
這有什麼用處呢?
因為 dbt 指令除了更新你的資料庫,還可能在背後上傳 log 檔或各種執行結果到你的資料庫,但我們很常在本機測試執行,我們也不想每次執行都把結果都上傳,耗費資源和執行時間,因此跑 dbt run 或 dbt test 加上 —target prod 讓 dbt 知道你這次若是正式環境,才需要把東西上傳
--vars
--vars
參數用於指定 dbt 專案環境的變數。這有助於管理不同環境中的配置和變數
使用情境:
除了 target 的用法, vars 也可以幫你區分環境。若你在跑 CI 流程而非正式環境,你可以透過 env 設定跑 dbt 指令時 CI 時資料庫的 dataset 或是 table 是在 staging 環境而非正式,因此不會動到正式環境,若 CI 有問題可以去 staging 環境查看
→此設定需要搭配 get_custom_schema 的改寫
{%- if custom_schema_name is none -%}
{{ default_schema }}
{%- else -%}
{%- set env = var("env", none) -%}
{%- if env is none -%}
{{ custom_schema_name | trim }}
{%- elif env == "staging" -%}
{{ custom_schema_name | trim }}_staging
{%- else -%}
none
{%- endif -%}
{%- endif -%}
改寫了以上 get_custom_schema,之後只想在測試環境執行, command 加上 'env: staging' ,你的 model 就是在 另給 dataset 生成囉!
dbt build --select my_model --vars 'env: staging'
你的 dbt model 需要帶參數進去,你可以在跑 dbt run 時設定要帶入變數的值,你的變數可以設定在 mode 裡或是 dbt_project.yml
官方文件:
2.如何定義變數: 如何設定你的變數,除了在 model, 還可以在 dbt_project.yml , 也可以在 command line